package com.ushine.web.component.mapstruct.model.converter;

import com.ushine.web.component.mapstruct.model.data.UserModelDO;
import com.ushine.web.component.mapstruct.model.query.UserModelQuery;
import com.ushine.web.component.mapstruct.model.vo.UserModelVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

/**
 * @Author: yls
 * @Date 2022/5/7 9:19
 * @Description: 数据转换器
 * // 注意：@Mapper的导包一定要导入：【org.mapstruct.Mapper】，不要导入了【mybatis plus】的包
 * @Version 1.0
 **/
@Mapper
public interface  UserModelMapper {

    UserModelMapper USER_MODEL_MAPPER = Mappers.getMapper(UserModelMapper.class);

    /**
     * 功能描述:
     * 〈 数据库对象【DO】直接转换为视图层对象【VO】，只转换属性一样的字段  〉
     *
     * @param userModelDO 数据库对象【DO】
     * @return : com.ushine.web.component.mapstruct.model.vo.UserModelVO
     * @author : yls
     * @date : 2022/5/7 9:28
     */
    UserModelVO userDoToVo(UserModelDO userModelDO);

    /**
     * 功能描述:
     * 〈 查询封装对象【Query】直接转换成 数据库实体对象【DO】〉
     *
     * @param userModelQuery 查询对象转【Query】
     * @return : com.ushine.web.component.mapstruct.model.data.UserModelDO
     * @author : yls
     * @date : 2022/5/7 9:31
     * @throws
     */
    UserModelDO userQueryToDo(UserModelQuery userModelQuery);


    /**
     * 功能描述:
     * 〈 嵌套对象属性，数据库对象【DO】直接转换为视图层对象【VO】，只转换属性一样的字段  〉
     *
     * @param userModelDO 数据库对象【DO】
     * @return : com.ushine.web.component.mapstruct.model.vo.UserModelVO
     * @author : yls
     * @date : 2022/5/7 9:28
     */
    @Mapping(source = "orgModelDO.orgName",target = "orgName")
    UserModelVO userDoToVoByNesting(UserModelDO userModelDO);

    /**
     * 功能描述:
     * 〈 嵌套对象属性，查询封装对象【Query】直接转换成 数据库实体对象【DO】〉
     *
     * @param userModelQuery 查询对象转【Query】
     * @return : com.ushine.web.component.mapstruct.model.data.UserModelDO
     * @author : yls
     * @date : 2022/5/7 9:31
     * @throws
     */
    @Mapping(source = "orgName",target = "orgModelDO.orgName")
    UserModelDO userQueryToDoByNesting(UserModelQuery userModelQuery);

}
